一、 使用全局函数作为回调
在C++中可以使用类似于C语言方式的回调函数,也就是将全局函数定义为回调函数:
1 2 3 4 5 6 7 8 9 10
| typedef void(*pCalledFun)(int*); void GetCallBack(pCalledFun parafun) { } void funCallback(int* iNum) { } void main() { GetCallBack(funCallback); }
|
二、使用类的静态成员函数作为回调
静态成员函数和全局函数很类似,函数调用时不会使用this指针,可以像使用全局函数一样使用静态函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <iostream> using namespace std; typedef void (*pFun)(void); class CCallBack{ public: static void TextPrint(void) { cout << "Static Callback Function of a Class" << endl; } }; void ForText(pFun pFun1) { pFun1(); } void main() { ForText(CCallBack::TextPrint); }
|
三、使用类的非静态成员函数作为回调
要注意的是非静态的成员函数必须通过对象来访问,我们可以这样使用,即给Caller多传个对象进去:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class CCallback { public: void Func(int a) { cout << "member function callback called with para= " << a << endl; } }; typedef void (CCallback::*pMmeberFunc)(int); void Caller(CCallback* pObj, pMemberFunc p) { (pObj->*p)(1); } int main(int argc, char** argv) { CCallback obj; Caller(&obj, &CCallback::Func); }
|